package com.hyz.appsignaturecheack;

import android.content.Context;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.TextView;

/**
 * 注意事项：
 * 1.System.loadLibrary("cheack");放到MainActivity是可以的，放到一个单独的类报错
 * 2.checkSignature比较的是keytool -list -v - keystore产生的md5
 * 3.ldLibs "log"//实现__android_log_print，这里有坑
 * 4.请看cheack.cpp中 JNI_OnLoad方法。
 * 5.需将签名的md5 赋值到APP_SIGNATURE中。
 * 6.ContextHolder可以保留
 * 7.更改APP_SIGNATURE值，或重新打包签名后，进入MainActivity就崩溃，不用点按钮(前提是cheack.cpp中189行不注释--)
 * 8.C文件编译、严格从上到下。前面的方法不能调用后面定义的方法
 * 9.至此签名验证完成。
 */
public class MainActivity extends AppCompatActivity {

    // Used to load the 'native-lib' library on application startup.
    static {
        // 如果想要检测签名不通过的时候让 App crash，需要在 native-lib.cpp 的 JNI_OnLoad 函数中返回 -1 即可
        System.loadLibrary("cheack");
    }

    TextView tv;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        tv = (TextView) findViewById(R.id.tv);
        findViewById(R.id.btn).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                init();
            }
        });
    }

    public void init() {
//        CheackUtils utils = new CheackUtils();
//        utils.checkSignature(getApplicationContext());

        String currentAppSignature = SignatureUtils.getSignMd5Str(this);
        tv.setText("currentAppSignature :\n" + currentAppSignature
                + "\n\ncheckSignature = " + checkSignature(getApplicationContext()));
    }

    public native boolean checkSignature(Context context);
}
